iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0

上回我們使用了基本的單元測試來測試我們建立的方法,由結果可知當我們測試的Case夠多的時候,對於我們方法的測試結果也就會更加的嚴謹,今天我們就嘗試用不同的方式來進行單元測試。


首先我們先建立一個測試用的方法,內容為輸入ID會回傳相對應的名字,語法如下:

        public string GetNameByID(int ID)
        {
            switch (ID)
            {
                case 1:
                    return "小明";
                case 2:
                    return "小華";
                default:
                    return "查無此人";
            }
        }

由此可知,當我們給定ID等於1或2時,會回傳相對應的名字,其他的都是"查無此人",現在我們先以上回的方式建立測試Case,語法如下:

        [Fact]
        public void Test1()
        {
            string actual_1 = GetNameByID(1);
            string actual_2 = GetNameByID(2);
            string actual_3 = GetNameByID(3);
            string actual_4 = GetNameByID(4);

            string expected_1 = "小明";
            string expected_2 = "小華";
            string expected_3 = "查無此人";
            string expected_4 = "查無此人";

            Assert.Equal(expected_1, actual_1);
            Assert.Equal(expected_2, actual_2);
            Assert.Equal(expected_3, actual_3);
            Assert.Equal(expected_4, actual_4);
        }

        public string GetNameByID(int ID)
        {
            switch (ID)
            {
                case 1:
                    return "小明";
                case 2:
                    return "小華";
                default:
                    return "查無此人";
            }
        }

完成後一樣可以執行通過,但是這樣寫有一個問題,就是日後我們要新增測試Case時,我們必須去更動測試(關卡)的內容,這有點違背了原則,所以在這裡我們將測試Case上方的[Fact]改為Theory(等同TestCase),並且從上方(InlineData)給定我要測試的參數以及預期結果,而測試Case裡面就用其他參數取代,語法如下:

        [Theory]
        [InlineData(1, "小明")]
        [InlineData(2, "小華")]
        [InlineData(3, "查無此人")]
        [InlineData(4, "查無此人")]
        public void TestCase(int ID, string expected)
        {
            string actual = GetNameByID(ID);

            Assert.Equal(expected, actual);
        }

        public string GetNameByID(int ID)
        {
            switch (ID)
            {
                case 1:
                    return "小明";
                case 2:
                    return "小華";
                default:
                    return "查無此人";
            }
        }

這樣的做法有助於我們在程式有變動的時候也能確保測試不變,不過意義上來說,前著是一個測試Case把所有內容跑完,後者是同一個測試Case跑了4組。

更多小知識,我們下次見~~


上一篇
DAY 19 :建立方法及簡易單元測試
下一篇
DAY 21 :驗證物件及簡易API整合測試
系列文
沒有厲害的頭腦,也能利用腳本實現懶人寫程式的夢想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言